package com.jsbs.iam.user.mapper;

import com.jsbs.iam.user.dto.*;
import com.jsbs.iam.user.entity.IamUserTypeBase;
import com.jsbs.iam.user.entity.IamUserTypeExtendedField;
import com.jsbs.iam.user.vo.IamUserTypeExtendedFieldVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @BelongsProject: iam
 * @BelongsPackage: com.jsbs.iam.user.mapper
 * @Author: WangJiYuan
 * @Description: TODO
 * @Version: 2022-12-20  17:34
 */
@Mapper
@Repository
public interface UserTypeMapper {
    /**
     * 查询用户类型数据
     * @param companyCode
     * @return
     */
    List<IamUserTypeBase> getUserTypeData(@Param("companyCode")String companyCode, @Param("userTypeInfo")String userTypeInfo);

    /**
     * 查询用户类型编码
     * @return
     */
    String selectUserTypeId(@Param("companyCode")String companyCode);

    /**
     * 校验用户类型名称是否唯一
     *
     * @param userTypeInfo
     * @param companyCode
     * @return
     */
    int checkName(@Param("userTypeInfo") String userTypeInfo, @Param("companyCode")String companyCode);

    /**
     * 新增用户类型
     * @param userTypeAddDto
     */
    void addUserType(@Param("userTypeAddDto")UserTypeAddDto userTypeAddDto);

    /**
     * 校验用户类型下是否有用户
     *
     * @param userTypeCode
     * @param companyCode
     * @return
     */
    int checkUserCount(@Param("userTypeCode")String userTypeCode, @Param("companyCode")String companyCode);

    /**
     * 根据用户类型编码逻辑删除用户类型
     * @param deleteDto
     */
    void deleteUserType(@Param("deleteDto") UserTypeDeleteDto deleteDto);

    /**
     * 查询对应用户类型下所有字段
     * @param userTypeFieldSelectDto
     * @return
     */
    List<IamUserTypeExtendedField> selectUserTypeFieldList(@Param("userTypeFieldSelectDto")UserTypeFieldSelectDto userTypeFieldSelectDto);

    /**
     * 查询用户字段编码
     * @return
     */
    String selectUserTypeFieldId(@Param("companyCode")String companyCode);

    /**
     * 新增用户类型字段
     * @param userTypeFieldAddDto
     */
    void addUserTypeField(@Param("userTypeFieldAddDto")UserTypeFieldAddDto userTypeFieldAddDto);

    /**
     * 修改用户类型字段
     * @param userTypeFieldUpdateDto
     */
    void updateUserTypeField(@Param("userTypeFieldUpdateDto")UserTypeFieldUpdateDto userTypeFieldUpdateDto);

    /**
     * 根据字段id逻辑删除用户类型字段
     * @param userTypeFieldUpdateDto
     */
    void deleteUserTypeFieldById(@Param("userTypeFieldUpdateDto") UserTypeFieldUpdateDto userTypeFieldUpdateDto);

    /**
     * 根据id逻辑删除用户类型字段存储的数据
     * @param userTypeFieldUpdateDto
     */
    void deleteUserTypeFieldValueById(@Param("userTypeFieldUpdateDto") UserTypeFieldUpdateDto userTypeFieldUpdateDto);

    /**
     * 删除用户类型字段数据
     * @param deleteDto
     */
    void deleteUserTypeFieldData(@Param("deleteDto")UserTypeDeleteDto deleteDto);

    /**
     * 功能描述：根据用户类型获取对应扩展字段列表
     * @param userTypeCode
     * @return
     */
    List<IamUserTypeExtendedFieldVo> queryByUserTypeCode(@Param("userTypeCode") String userTypeCode);
}
